#include <Servo.h> //调用舵机库函数
#include <Wire.h> //调用IIC库函数
#include <Adafruit_TCS34725.h>
#include <Adafruit_I2CDevice.h>
#include <DHT.h>//温湿度
// #ifdef __AVR__
//   #include <avr/power.h>//调用avr库函数用来设置CPU的工作频率
// #endif
#include <U8g2lib.h>//调用U8g2库函数：用于控制OLED屏幕

// 使用软件I2C（D2=SDA, D3=SCL）
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, 3, 2, U8X8_PIN_NONE);

// 定义 DHT11 传感器引脚和类型
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

// 轻量字体
#define USE_SMALL_FONT 1

// 定义舵机对象
Servo myServo1;
Servo myServo2;

// 定义舵机控制引脚
const int servoPin1 = 3;
const int servoPin2 = 4;

//颜色传感器不同通道值设置
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);//设置颜色传感器采样周期
enum{slowForward=1,fastForward,Stop};//定义刷子状态：慢刷、快刷、停止，分别对应1、2、3

void setup() {
    // 初始化颜色传感器
    if (!tcs.begin()) {
        Serial.println(F("TCS34725 initialization failed!"));
    } else {
        Serial.println(F("TCS34725 initialized successfully!"));
    }
    u8g2.begin();

    if (!u8g2.getU8x8()->display_info) {
        Serial.println(F("OLED initialization failed!"));
    } else {
        Serial.println(F("OLED initialized successfully!"));
    }
    dht.begin();
  
    // 初始化串口通信
    Serial.begin(9600);
    Serial.println(F("Color View Test!"));//串口打印：Color View Test!

    // 将舵机连接到指定引脚
    myServo1.attach(servoPin1);
    myServo2.attach(servoPin2);

    Motor_pin_init();//直流电机引脚初始化
    delay(500);
}

void loop() {
    // 读取温湿度数据（使用局部变量）
    float temperature = dht.readTemperature();
    float humidity = dht.readHumidity();
    
    if (isnan(humidity) || isnan(temperature)) {
        displayError(F("Sensor Error!"));
        delay(2000);
        return;
    }

    displayData(temperature, humidity);
    delay(2000);
}
